// axios
import axios from 'axios';
// 引入store
import store from '../store';
// 路由
// import router from '../router';
// loading
import { Loading, Message } from 'element-ui';

import qs from 'qs';
let loadingInit;

// 添加请求和响应拦截器
export default () => {
  // 配置请求
  let cancelToken = axios.CancelToken;
  let source = cancelToken.source();
  // 添加请求拦截器
  axios.interceptors.request.use(
    (config) => {
      // Loading
      if (config.headers.needLoading) {
        loadingInit = Loading.service({
          lock: true,
          text: '加载中···',
          spinner: 'el-icon-loading',
          background: 'rgba(0, 0, 0, 0.7)'
        });
      }
      //所有的请求中配置的是同一个cancelToken，所以在之后的所有请求都会直接执行onCanceled方法
      config.cancelToken = source.token;
      config.headers['Content-type'] = 'application/json';
      // 添加token
      config.headers['X-Access-Token'] = store.state.userInfo.token;
      if (config.method === 'get') {
        //如果是get请求，且params是数组类型如arr=[1,2]，则转换成arr=1&arr=2
        config.paramsSerializer = (params) => {
          return qs.stringify(params, { arrayFormat: 'repeat' });
        };
        //  给data赋值以绕过if判断
        config.data = true;
      }
      return config;
    },
    (error) => {
      // 对请求错误做些什么
      return Promise.reject(error);
    }
  );
  // 添加响应拦截器
  axios.interceptors.response.use(
    async (response) => {
      // 关闭loading
      if (response.config.headers.needLoading) {
        loadingInit.close();
      }
      // 统一处理非200的错误处理
      if (response.data.code && response.data.code !== 200) {
        Message.error({
          message: response.data.message,
          duration: 1000
        });
      }
      return response;
    },
    (error) => {
      // if (error.response.data.code) {
      //     router.push({ path: '/login' });
      // }
      // 关闭loading
      loadingInit.close();
      // 对响应错误做点什么
      return Promise.reject(error);
    }
  );
};
